package com.xianyun.common.core.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 参数校验异常
 * @author mac_zyj
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class ParamCheckException extends RuntimeException{
    private static final long serialVersionUID = 1L;
    /**当前位置*/
    private final Integer index;

    /**
     * 所属模块
     */
    private final String module;

    /**
     * 错误码
     */
    private final String code;

    /**
     * 返回结果
     */
    private final Map<String,Object> resultMap;

    /**
     * 错误消息
     */
    private final String defaultMessage;

    public ParamCheckException(String module, String code, Integer index, String defaultMessage)
    {
        this.module = module;
        this.code = code;
        this.index = index;
        this.defaultMessage = defaultMessage;
        Map<String,Object> errorData=new HashMap<>(2);
        errorData.put("success",false);
        errorData.put("code",code);
        resultMap=new LinkedHashMap<>(6);
        resultMap.put("code",200);
        resultMap.put("model",module);
        resultMap.put("data",errorData);
        resultMap.put("index",index);
        resultMap.put("defaultMessage",defaultMessage);
    }

    /**
     *
     * @param module 模块
     * @param code 错误码
     * @param index 位置
     */
    public ParamCheckException(String module, String code, Integer index)
    {
        this(module, code, index, null);
    }

    /**
     *
     * @param module 模块
     * @param index 位置
     * @param defaultMessage 错误信息
     */
    public ParamCheckException(String module, Integer index , String defaultMessage)
    {
        this(module, null, index, defaultMessage);
    }

    /**
     *
     * @param index 位置
     * @param code 错误码
     * @param defaultMessage 错误信息
     */
    public ParamCheckException(Integer index, String code, String defaultMessage)
    {
        this(null, code, index, defaultMessage);
    }

    /**
     *
     * @param module 模块
     * @param defaultMessage 错误信息
     */
    public ParamCheckException(String module, String defaultMessage)
    {
        this(module, null, null, defaultMessage);
    }

    /**
     *
     * @param code 错误码
     * @param index 位置
     */
    public ParamCheckException(String code, Integer  index)
    {
        this(null, code, index, null);
    }

    /**
     *
     * @param defaultMessage 错误信息
     */
    public ParamCheckException(String defaultMessage)
    {
        this(null, null, null, defaultMessage);
    }
}
